import unittest
from python.unit.MathFunction_01 import MathCalc

"""
    1、通过 单元测试 unittest 框架来进行测试
    1、导入 unittest  模块
    2、 如果 unittest  pip install unittest
"""


# 一旦  类 继承 unittest.TestCase  那么这个类就是一个测试用例
class MyTestCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        print('在 类 开始运行之前运行！')

    @classmethod
    def tearDownClass(cls) -> None:
        print('在类运行结束后 运行！')

    def setUp(self) -> None:
        print('在测试方法执行前运行')

    def tearDown(self) -> None:
        print('在测试方法运行结束之后运行')

    """
        1、如果在进行从测试的时候 不想运行 类中的某一个或者某几个测试方法 ，那么我们可以设置 将某个测试方法 忽略执行
            1：在方法的头部 忽略 测试方法   3
                1、    @unittest.skip("不想测") 被 此注解 注解的方法 在运行时 会被忽略执行
                2、    @unittest.skipIf(condition=4 > 3, reason="当判断条件成立的情况下跳过 测试方法的执行")
                3、    @unittest.skipUnless(condition=4 > 3, reason="当判断条件不成立的情况下跳过 测试方法的执行")
            2：在方法的内部 忽略 测试方法   1
                1、
    """

    # 在测试用例中 是有 测试步骤，add  less  mutil device
    # 在测试用例中，会有很多个测试函数，每一个测试函数的名字 必须 以 test开头
    # @unittest.skip("不想测")
    # @unittest.skipIf(condition=4 > 3, reason="当判断条件成立的情况下跳过 测试方法的执行")
    # @unittest.skipUnless(condition=4 > 3, reason="当判断条件不成立的情况下跳过 测试方法的执行")
    def test_add(self):
        """测试加法方法"""
        self.skipTest('在方法中跳过')
        result = MathCalc.add(2, 3)
        print(result)

        # 断言 ： 如果你想判断 测试是否通过 要通过断言 来判断  self.assertEqual 来判断 预期值 和 实际值是否一致
        self.assertEqual(5, result)

    def test_less(self):
        """测试减法方法"""
        result = MathCalc.less(2, 3)
        print(result)
        # 断言 ： 如果你想判断 测试是否通过 要通过断言 来判断  self.assertEqual 来判断 预期值 和 实际值是否一致
        self.assertEqual(-1, result)

    def test_mutle(self):
        """测试乘法方法"""
        result = MathCalc.mutil(2, 3)
        print(result)
        self.assertEqual(6, result)

    def test_devide(self):
        """测试除法方法"""
        result = MathCalc.devide(3, 4)
        print(result)
        # 断言 ： 如果你想判断 测试是否通过 要通过断言 来判断  self.assertEqual 来判断 预期值 和 实际值是否一致
        self.assertEqual(0.75, result)


if __name__ == '__main__':
    unittest.main()
